// app.js
const apiService = require('./utils/api-service.js');
const MessageUtil = require('./utils/message-util.js');

App({
  onLaunch() {
    console.log('小程序启动');
    
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 设置初始化状态
    this.globalData.isInitializing = true;
    this.globalData.initializationError = null;

    // 静默登录
    this.performSilentLogin();
  },

  // 执行静默登录
  async performSilentLogin() {
    try {
      console.log('开始静默登录...');
      
      // 检查是否已经登录
      if (apiService.isUserLoggedIn()) {
        console.log('用户已登录，跳过静默登录');
        this.globalData.userInfo = apiService.userInfo;
        this.globalData.isLoggedIn = true;
        this.globalData.isOfflineMode = false;
        this.finishInitialization(true);
        return;
      }

      // 执行静默登录
      const result = await apiService.silentLogin();
      
      if (result.success) {
        console.log('静默登录成功:', result.userInfo);
        this.globalData.userInfo = result.userInfo;
        this.globalData.isLoggedIn = true;
        
        // 可以在这里触发其他需要登录状态的操作
        this.onLoginSuccess();
        this.finishInitialization(true);
      }
    } catch (error) {
      console.error('静默登录失败:', error);
      this.globalData.isLoggedIn = false;
      this.globalData.initializationError = error;
      
      // 可以在这里处理登录失败的逻辑
      this.onLoginFailed(error);
      this.finishInitialization(false);
    }
  },

  // 完成初始化
  finishInitialization(success) {
    console.log('初始化完成，成功:', success);
    this.globalData.isInitializing = false;
    
    // 通知所有页面初始化完成
    this.notifyPagesInitComplete(success);
  },

  // 通知页面初始化完成
  notifyPagesInitComplete(success) {
    // 获取当前页面栈
    const pages = getCurrentPages();
    if (pages.length > 0) {
      const currentPage = pages[pages.length - 1];
      
      // 如果当前页面有初始化完成的回调，则调用
      if (typeof currentPage.onAppInitComplete === 'function') {
        currentPage.onAppInitComplete(success);
      }
    }
  },

  // 检查是否正在初始化
  isInitializing() {
    return this.globalData.isInitializing;
  },

  // 获取初始化错误
  getInitializationError() {
    return this.globalData.initializationError;
  },

  // 登录成功回调
  onLoginSuccess() {
    console.log('登录成功，可以进行后续操作');
    
    // 检查是否为测试模式，如果是测试模式则不清除手动设置
    const isTestMode = this.isTestMode();
    if (isTestMode) {
      console.log('🧪 测试模式：保持当前手动设置的离线状态');
      return;
    }
    
    // 清除离线模式状态
    this.globalData.isOfflineMode = false;
    
    // 清除离线状态存储
    try {
      wx.removeStorageSync('app_offline_mode');
    } catch (e) {
      console.error('清除离线状态失败:', e);
    }
  },

  // 登录失败回调
  onLoginFailed(error) {
    console.log('登录失败，进入离线模式');
    
    // 检查是否为测试模式，如果是测试模式则不覆盖手动设置
    const isTestMode = this.isTestMode();
    if (isTestMode) {
      console.log('🧪 测试模式：保持当前手动设置的离线状态');
      return;
    }
    
    // 设置离线模式状态
    this.globalData.isOfflineMode = true;
    
    // 保存离线状态到本地存储
    try {
      wx.setStorageSync('app_offline_mode', true);
    } catch (e) {
      console.error('保存离线状态失败:', e);
    }
  },

  // 获取登录状态
  isLoggedIn() {
    return this.globalData.isLoggedIn && apiService.isUserLoggedIn();
  },

  // 检查是否为离线模式
  isOfflineMode() {
    // 先检查内存状态
    if (this.globalData.isOfflineMode !== undefined) {
      return this.globalData.isOfflineMode;
    }
    
    // 从本地存储检查
    try {
      const offlineMode = wx.getStorageSync('app_offline_mode');
      const testMode = wx.getStorageSync('test_offline_mode');
      
      // 如果是测试模式，显示额外日志
      if (testMode) {
        console.log('🧪 测试模式：手动设置的离线状态 =', !!offlineMode);
      }
      
      this.globalData.isOfflineMode = !!offlineMode;
      return this.globalData.isOfflineMode;
    } catch (e) {
      console.error('读取离线状态失败:', e);
      return false;
    }
  },

  // 检查是否为测试模式
  isTestMode() {
    try {
      return !!wx.getStorageSync('test_offline_mode');
    } catch (e) {
      return false;
    }
  },

  // 获取用户信息
  getUserInfo() {
    return this.globalData.userInfo;
  },

  // 手动重新登录
  async reLogin() {
    try {
      const result = await apiService.silentLogin();
      if (result.success) {
        this.globalData.userInfo = result.userInfo;
        this.globalData.isLoggedIn = true;
        this.onLoginSuccess();
        return true;
      }
    } catch (error) {
      console.error('重新登录失败:', error);
      MessageUtil.showServiceError();
    }
    return false;
  },

  globalData: {
    userInfo: null,
    isLoggedIn: false,
    isOfflineMode: false,
    isInitializing: false,
    initializationError: null
  }
})
